#ifndef SCENETOOL_H
#define SCENETOOL_H
#include <QGraphicsSceneMouseEvent>

class CustomGraphicsScene;

/**
 * @class SceneTool
 * Теперь CustomGraphicsScene - это лишь Proxy, который делегирует всю работу
 * классам-потомкам SceneTool. Это нужно для того, чтобы инкапсулировать куски,
 * ответственные за работу различных инструментов, в отдельные классы. Таким
 * образом, их (теоретически!) можно поручить разным разработчикам, не опасаясь,
 * что они передерутся между собой.
 */
class SceneTool : public QObject
{
	Q_OBJECT
public:
	virtual bool activate (CustomGraphicsScene *scene, SceneTool *after);	///< Активация инструмента
	virtual bool deactivate (SceneTool *replace);							///< Деактивация инструмента
	virtual bool mousePressEvent (QGraphicsSceneMouseEvent *event);			///< Отлавливает нажатия кнопок мыши
	virtual bool mouseMoveEvent (QGraphicsSceneMouseEvent *event);			///< Отлавливает перемещения мыши
	virtual bool mouseReleaseEvent (QGraphicsSceneMouseEvent *event);		///< Отлавливает отпускания кнопок мыши
	virtual bool mouseDoubleClickEvent (QGraphicsSceneMouseEvent *event);	///< Отлавливает двойной щелчок мышью
	virtual CustomGraphicsScene *scene() const;								///< Указатель на сцену, с которой происходит работа
private:
	CustomGraphicsScene *_scene;
signals:
	//! После того, как инструмент был выбран (как только, так сразу)
	void activated();
	//! Если он был сменен (другим - К.О.)
	void deactivated();
};

#endif // SCENETOOL_H
